<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>
    // ES6 数值拓展

    // JavaScript 所有数字都保存成 64 位浮点数，这给数值的表示带来了两大限制。一是数值的精度只能到 53 个二进制位（相当于 16 个十进制位），大于这个范围的整数，JavaScript 是无法精确表示，这使得 JavaScript 不适合进行科学和金融方面的精确计算。二是大于或等于2的1024次方的数值，JavaScript 无法表示，会返回Infinity。

    // 1. 大于2^53次方(10^16)的数无法精确表示
    // console.log(Math.pow(2, 53));
    // console.log(Math.pow(2, 53) + 1);
    // console.log(Math.pow(2, 53) + 2);
    // console.log(Math.pow(2, 53) + 3);

    // 2. 大于或等于2的1024次方的数值，JavaScript 无法表示，会返回Infinity。
    // console.log(Math.pow(2, 1024));

    // BigInt  => ES6新增数据类型(大整数)
    // ES2020 引入了一种新的数据类型 BigInt（大整数），来解决这个问题，这是 ECMAScript 的第八种数据类型。BigInt 只用来表示整数，没有位数的限制，任何位数的整数都可以精确表示。

    // 如何创建大整数BigInt
    // (1)  Number 类型区别，BigInt 类型的数据必须添加后缀n。
    /* const a = 2172141653;
    const b = 15346349309;
    console.log(a * b);

    const A = 2172141653n;
    const B = 15346349309n;
    console.log(A * B + 1n); */

    // (2) 通过BigInt()方法将数字转化为大整数类型

    // const a = 2172141653;
    // const b = 15346349309;
    // console.log(a * b);

    // const A = BigInt(a);
    // const B = BigInt(b);
    // console.log(A * B + 1n);

    // 2 的 1024次方
    // console.log(Math.pow(2n, 1024));  // Math.pow不能进行大整数运算
    // console.log(2n ** 1024n);  // 2^1024












</script>

</html>